/* The number of the face to use to indicate the region. */
int region_face;
+/* This is what appears in a slot in a face to signify that the face
+ does not specify that display aspect. */
#define FACE_DEFAULT (~0)
Lisp_Object Qface, Qwindow, Qpriority;
int i, j, noverlays;
int facecode;
Lisp_Object *overlay_vec;
- int len;
struct sortvec *sortvec;
Lisp_Object frame;
int endpos;
{
int next_overlay;
+ int len;
+
+ /* First try with room for 40 overlays. */
+ len = 40;
+ overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
+
+ noverlays = overlays_at (pos, 0, &overlay_vec, &len, &next_overlay);
+
+ /* If there are more than 40,
+ make enough space for all, and try again. */
+ if (noverlays > len)
+ {
+ len = noverlays;
+ overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
+ noverlays = overlays_at (pos, 0, &overlay_vec, &len, &next_overlay);
+ }
- len = 10;
- overlay_vec = (Lisp_Object *) xmalloc (len * sizeof (Lisp_Object));
- noverlays = overlays_at (pos, &overlay_vec, &len, &next_overlay);
if (next_overlay < endpos)
endpos = next_overlay;
}
merge_faces (FRAME_FACES (f) [region_face], &face);
}
- xfree (overlay_vec);
-
*endptr = endpos;
return intern_frame_face (f, &face);